package CrawlerToDB;

/**
 * Created by Administrator on 2016/12/26 0026.
 * 全网爬虫
 */
import DataBase.DB;

import java.util.Set;

public class BfsSpider {
    /**
     * 使用种子初始化URL队列
     */
    private void initCrawlerWithSeeds(String[] seeds) {
        for (int i = 0; i < seeds.length; i++)
            SpiderQueue.addUnvisitedUrl(seeds[i]);
    }

    // 定义过滤器，提取以 http://www.xxxx.com开头的链接
    public void crawling(String[] seeds) throws Exception{
        LinkFilter filter = new LinkFilter() {
            public boolean accept(String url) {
                if (url.startsWith("http://www.bilibili.com"))
                    return true;
                else
                    return false;
            }
        };
        // 初始化 URL 队列
        initCrawlerWithSeeds(seeds);
        // 循环条件：待抓取的链接不空且抓取的网页不多于 1000
        DB.db();//开启数据库连接
        while (!SpiderQueue.unVisitedUrlsEmpty()
                && SpiderQueue.getVisitedUrlNum() <= 1000) {
            // 队头 URL 出队列
            String visitUrl = (String) SpiderQueue.unVisitedUrlDeQueue();
            if (visitUrl == null)
                continue;
            /*downloadTool downLoader = new downloadTool();
            // 下载网页
            downLoader.downloadFile(visitUrl);*/
            try {
                DB.insert_html(visitUrl,"bilibili");
                System.out.println(visitUrl);
            }
            catch (Exception e){
                e.printStackTrace();
            }

            // 该 URL 放入已访问的 URL 中
            SpiderQueue.addVisitedUrl(visitUrl);
            // 提取出下载网页中的 URL
            Set<String> links = htmlParserTool.extracLinks(visitUrl, filter);
            // 新的未访问的 URL 入队
            for (String link : links) {
                SpiderQueue.addUnvisitedUrl(link);
            }
        }
        DB.close();//关闭数据库连接
    }
}